package com.peaker.advertisingpro.utils

import android.annotation.SuppressLint
import android.app.Activity
import android.app.ActivityManager
import android.app.smdt.SmdtManager
import android.content.Context
import android.media.AudioManager
import android.media.MediaPlayer
import android.provider.Settings
import android.provider.Settings.SettingNotFoundException
import android.text.format.Formatter
import android.view.Window
import android.view.WindowManager



/**
 *  @ 作者 CODE_LYF
 *  @ 时间   2021/3/24.
 *  代码人生
 */
@SuppressLint("StaticFieldLeak")
object SmdtManagerUtils {
    var mediaPlayer = MediaPlayer()
    lateinit var smat: SmdtManager
    lateinit var context: Context
    fun init(context: Context) {
        smat = SmdtManager.create(context)
        this.context = context
    }

    /**
     * 获取系统信息
     */
    fun smdtGetAPIVersion() = smat.smdtGetAPIVersion()

    /**
     * 是否背光
     */
    fun smdtGetLcdLightStatus() = smat.smdtGetLcdLightStatus()

    /**
     * 获取设备型号
     */
    fun getAndroidModel(): String {
        var board = android.os.Build.BOARD
        return if (smat.androidModel == null) android.os.Build.MODEL else smat.androidModel
    }

    /**
     * 获取设备android 版本
     */
    fun getAndroidVersion(): String {
        return if (smat.androidVersion == null) android.os.Build.VERSION.RELEASE else smat.androidVersion
    }

    /**
     * 厂商
     */

    fun getDeviceBrand() = android.os.Build.BRAND

    /**
     * 获取内存大小 硬件内存大小
     */

    fun getRunningMemory() = smat.runningMemory

    /**
     * 获取设备的硬件内部存储大小容量
     */
    fun getInternalStorageMemory(): String = smat.internalStorageMemory

    /**
     * 获取可用内存
     */
    fun getAvailableMemory(): String {
        //获得ActivityManager服务的对象
        val mActivityManager =
            context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager?
        //获得MemoryInfo对象
        val memoryInfo = ActivityManager.MemoryInfo()
        //获得系统可用内存，保存在MemoryInfo对象上
        mActivityManager!!.getMemoryInfo(memoryInfo)
        val memSize = memoryInfo.availMem
        val availMem: String = Formatter.formatFileSize(context, memSize)
        return availMem
    }

    /**
     * 获取sdk 版本
     */
    fun getFirmwareVersion() = smat.firmwareVersion

    /**
     * 获取设备的固件系统版本和编译日期
     */
    fun getAndroidDisplay() = smat.androidDisplay

    /**
     * 获取设备的固件内核版本
     */
    fun getFormattedKernelVersion() = smat.formattedKernelVersion

    /**
     * 开关机 时间 24 小时制
     * enble 1代表使用，0代表不使用
     */
    fun smdtSetTimingSwitchMachine(offtime: String, ontime: String, enble: String) {
        smat.smdtSetTimingSwitchMachine(offtime, ontime, enble)
    }

    /**
     *关机
     */
    fun shutDown() {
        smat.shutDown()
    }

    /**
     * 重启系统
     */

    fun smdtReboot() {
        smat.smdtReboot("reboot")
    }

    /**
     * 截图  位置  名字   后缀为.png
     *
     */
    fun smdtTakeScreenshot(path: String, name: String) = smat.smdtTakeScreenshot(path, name, context)

    /**
     * 截图返回bitmap
     */
    fun smdtScreenShot() = smat.smdtScreenShot(context)


    /**
     * 设置屏幕逆时针旋转N角度
     * 只支持0 ， 90，  180，  270四个角度
     */
    fun setRotation( rotationDegree: String) {
        var roat:String
        roat=   rotationDegree.replace("°","")
        smat.setRotation(roat)
    }

    /**
     * 获取屏幕宽
     */
    fun smdtGetScreenWidth() = smat.smdtGetScreenWidth(context)

    /**
     * 获取屏幕高
     */
    fun smdtGetScreenHeight() = smat.smdtGetScreenHeight(context)

    /**
     * 获取状态栏状态
     */
    fun smdtGetStatusBar() = smat.smdtGetStatusBar(context)

    /**
     * 隐藏和显示状态栏
     */
    fun smdtSetStatusBar(enble: Boolean) {
        smat.smdtSetStatusBar(context, enble)
    }


    /**
     * 背光
     * 0 代表关
    1 代表开
     */
    fun smdtSetLcdBackLight(enble: Int) {
        smat.smdtSetLcdBackLight(enble)
    }

    /**
     * 设置背光亮度  0 ~ 255
     */
    fun setBrightness(brightness: Int) {

        smat.setBrightness(context.contentResolver, Utils.lightTrans(brightness))

    }

    fun setBrightness(brightness: Int,context  : Activity) {
        Settings.System.putInt(context.contentResolver, Settings.System.SCREEN_BRIGHTNESS, Utils.lightTrans(brightness))

        val localWindow: Window = context.window
        val localLayoutParams: WindowManager.LayoutParams = localWindow.getAttributes()
        val f: Float = Utils.lightTrans(brightness) / 255.0f
        localLayoutParams.screenBrightness = f
        localWindow.setAttributes(localLayoutParams)

    }


    /**
     * 获取屏幕亮度
     */
    fun getScreenBrightness(): Int {
        var value = 0
        val cr = context.contentResolver
        try {
            value = Settings.System.getInt(cr, Settings.System.SCREEN_BRIGHTNESS)
        } catch (e: SettingNotFoundException) {
        }

        value= value*100/255

        return value
    }

    /**
     * 获取最大音量
     */
    fun getMaxSysVolume(): Int {


        return AudioMngHelper(context).systemMaxVolume
    }

    /**
     * 获取当前音量
     */
    fun getCurrentSysVolume(): Int {

        return  SPUtil.getSP(Common.VOLUME,AudioMngHelper(context).get100CurrentVolume().toString())!!.toInt()


    }

    /**
     * 安装apk
     */
    fun smdtSilentInstall(path: String) {
        smat.smdtSilentInstall(path, context)

    }

    /**
     *获取设备以太网的MAC地址
     */
    fun smdtGetEthMacAddress() = smat.smdtGetEthMacAddress().replace(":", "")

    fun getAndroid_ID() = Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID)
//    fun getAndroid_ID() = "6bb4b8db891a4116a85f897f953c0fba"

    /**
     * 获取设备以太网的IP地址
     */
    fun smdtGetEthIPAddress() = smat.smdtGetEthIPAddress()

    /**
     * smdtGetSDcardPath
     * 获取外部存储SD卡路径
     */
    fun smdtGetSDcardPath() {
        smat.smdtGetSDcardPath(context)
    }

    /**
     * smdtGetUSBPath
     * 获取外部存储U盘路径
     */

    fun smdtGetUSBPath(num:Int) =
        smat.smdtGetUSBPath(context, num)



    /**
     * 设置音量
     */

    fun smdtSetVolume(volume: Int) {
        smat.smdtSetVolume(context, volume)


    }
    fun smdtGetVolum(context: Context)
        =smat.smdtGetVolume(context)


    /**
     * 设置音量android
     */
    fun smdtSetAndroidVolume(volume: Int): Int {
        SPUtil.putSP(Common.VOLUME,volume.toString())
        return AudioMngHelper(context).setVoice100(volume)
    }

    /**
     * 获取当前要设置的值
     */
    fun smdtgetAndroidVolume(volume: Int): Int {

        var audioMngHelper = AudioMngHelper(context)

        return 100* audioMngHelper.getVoice100(volume)/audioMngHelper.systemMaxVolume
    }

    /**
     * 设置时间
     */
    fun setTime(year: Int, month: Int, day: Int, hour: Int, minute: Int) =
        smat.setTime(context, year, month, day, hour, minute)

    /**
     * 运行 shell命令
     */
    fun execSuCmd(s: String) {
        smat.execSuCmd(s)
    }

    /**
     * 播放音频文件
     */
    fun openAudio(path: String) {

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
//        mediaPlayer.setAudioAttributes(AudioAttributes.CONTENT_TYPE_MUSIC)
//        if (context == null) {
//            mediaPlayer.setDataSource(path)
//        } else {
//            mediaPlayer.setDataSource(context, Uri.parse(path))
//            mediaPlayer.setDataSource()
//        }
        mediaPlayer.setDataSource(path)
        mediaPlayer.prepareAsync()
        mediaPlayer.setOnPreparedListener { mediaPlayer.start() }
        mediaPlayer.setOnCompletionListener {
            mediaPlayer.start()
        }

    }

    fun openAudioFun(path: String): MediaPlayer {
        if (mediaPlayer.isPlaying) {
            mediaPlayer.reset()
        }
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC)
        mediaPlayer.setDataSource(path)
        //mediaPlayer.isLooping = true
        mediaPlayer.prepareAsync()
        mediaPlayer.setOnPreparedListener { mediaPlayer.start() }
        return mediaPlayer

    }

    fun closeAudioFun() {
        if (mediaPlayer.isPlaying) {
            mediaPlayer.stop()
        }
    }

}